<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // apply 在某个方法调用时候限定该方法中this的指向
        // 调用方法.apply(调用者,数组)
        function show(){
            console.log(this);
        }
        var user={
            name:"tom"
        };
        show.apply(user);
        show.apply([10,20,30,40]);
        //  apply在指定this的指向的时候，如果传入的不是一个对象数据，call方法会将该数据转换为原始对象数据 
        // "aaa"基本数据类型==>引用数据类型 new String("aaa")
        show.apply("aa");
        show.apply(1234);

        function show2(a,b,c){
            console.log(this);
            console.log(a);
            console.log(b);
            console.log(c);
        }
        // apply第二个参数可以完成自行的循环展开，将数组元素对应赋值给函数的形参
        show2.apply(user,["参数1","参数2","参数3"]);


        var arrs=[10,30,40,100,78,32,1];
        console.log(Math.max(10,20,30,8,23,1,90));
        console.log(Math.min(10,20,30,8,23,1,90));
        console.log(Math.max.apply(null,arrs));
        console.log(Math.min.apply(null,arrs));

        // call和apply的区别是在于参数传递的格式不一样：
        // 如果是call，参数是一个一个以逗号隔开
        // 如果是apply，参数是以数组的形式传递的，后面参数只能有一个，会自动拆分为多个元素传入
    </script>
</head>
<body>
    
</body>
</html>